Код:
	
/*:
 *-----------------------------------------------------------------------------
 *  DKR JsonWorker
 *-----------------------------------------------------------------------------
 *  For: RPGMAKER MV, MZ
 *  DKR_JsonWorker_MV_MZ.js
 *-----------------------------------------------------------------------------
 *  28.06.2021 - Версия 1.0.0
 *-----------------------------------------------------------------------------
 * Поставляется AS-IS.
 * Вся ответственность при использовании - на Пользователе!
 *-----------------------------------------------------------------------------
 *-----------------------------------------------------------------------------
 * @author DarchanKaen
 * @target MV, MZ
 * @plugindesc (v.1.0.0)  Плагин позволяет работать с произвольными JSON-файлами (загружать / менять / создавать).
 * @help
 *   DKR JsonWorker MV_MZ 1.0
 * ----------------------------------------------------------------------------
 * ----Общая информация:
 * Плагин позволяет работать с произвольными JSON-файлами, а именно: 
 * загружать (полностью / частично) данные фйла в переменные мейкера,
 * менять (полностью / частично) данные в файле и создавать новые JSON-файлы. 
 * Также для упрощения можно использовать Основной файл.
 * После операций загрузки ("маппинга") / изменения ставьте Ждать на ~15 кадров!!!
 * ! Детали в демо и на сайте https://rpgmaker.su/ в разделе Плагинов !
 * ----Использование:
 * ---Параметры плагина
 * В параметрах можно указать: каталог, где находятся JSON-файлы, 
 * номер переменной для хранения имени Основного файла и название Основного файла.
 * ---Команды (для раздела "Скрипт"):
 * --Управляющие команды:
 * DKR.JsonWorker.setJSONDir('имя каталога\') - изменить каталог с JSON-файлы;
 * DKR.JsonWorker.setMainFile('имяФайла.json') - изменить Основной файл;
 * DKR.JsonWorker.clearMainFile() - очистить значение Основного файла чтоб его не использовать (физически файл не меняется!);
 * DKR.JsonWorker.setMainFileDefaultVariableId(номерПеременной) - изменить номер переменно для хранения имени Основного файла;
 * DKR.JsonWorker.isJSONFileExist('имяФайла.json') - узнать, существует ли (возвращает true) или нет (возвращает false) указаный JSON-файл;
 * --Рабочие команды:
 * - Чтение произвольного JSON-файла(просто выводит в консоль содержимое файла, для теста):
 * DKR.JsonWorker.readJson('имяФайла.json');
 * - Загрузка ("маппинг") данных произвольного JSON-файла на переменные мейкера:
 * DKR.JsonWorker.simpleMapJSON('имяФайла.json', номерПеременной);
 * DKR.JsonWorker.concreteMapJSON('имяФайла.json',['ключЗаписи1', ..., 'ключЗаписиN'], [номерПеременной1, ..., номерПеременнойN]);
 * DKR.JsonWorker.fullMapJSON ('имяФайла.json', [номерПеременной1, ..., номерПеременнойN]); 
 * - Создание произвольного JSON-файла:
 * DKR.JsonWorker.simpleWriteJSON('имяФайла.json', данныеДляЗаписи, ключЗаписи(можно не указывать));
 * DKR.JsonWorker.fullWriteJSON('имяФайла.json', [данныеДляЗаписи1, ...,данныеДляЗаписиN], [ключЗаписи1, ...,ключЗаписиN]);
 * - Изменение данных произвольного JSON-файла:
 * DKR.JsonWorker.simpleModifyJSON('имяФайла.json', ключЗаписи, данныеДляЗаписи);
 * DKR.JsonWorker.fullModifyJSON ('имяФайла.json', [ключЗаписи1, ...,ключЗаписиN], [данныеДляЗаписи1, ...,данныеДляЗаписиN]);
 * - Команды для Основного файла (по аналогии с вышеуказанным):
 * DKR.JsonWorker.readMainFile();
 * DKR.JsonWorker.simpleMapMainFile(номерПеременной);
 * DKR.JsonWorker.concreteMapMainFile(['ключЗаписи1', ..., 'ключЗаписиN'], [номерПеременной1, ..., номерПеременнойN]);
 * DKR.JsonWorker.fullMapMainFile([номерПеременной1, ..., номерПеременнойN]);
 * DKR.JsonWorker.simpleModifyMainFile(ключЗаписи, данныеДляЗаписи);
 * DKR.JsonWorker.fullModifyMainFile([ключЗаписи1, ...,ключЗаписиN], [данныеДляЗаписи1, ...,данныеДляЗаписиN]);
 * ----------------------------------------------------------------------------
 * ----Версия 1.0.0
 * --Релиз плагина!
 * ----------------------------------------------------------------------------
 * @param jsonDir
 * @type text
 * @desc Каталог, где находятся JSON-файлы.
 * @default metaJSON/
 *
 * @param mainFileNameDefVar
 * @type number
 * @desc Номер переменной, в которой сохраняется название Основгого файла.
 * @default 1
  *
 * @param mainFile
 * @type text
 * @desc Название Основного JSON-файла (он не обязателен).
 * @default mainFile.json
 */
 
 
var Imported = Imported || {};
Imported.DKR_JsonWorker = true;
var DKR = DKR || {};          
DKR.JsonWorker = DKR.JsonWorker || {}; 
DKR.JsonWorker.version = 1.0;
DKR.JsonWorker.parameters = PluginManager.parameters('DKR_JsonWorker_MV_MZ');
( () => {
	
		//---INNER VARIABLES
	const fileSystem = require('fs');
	const noneFile = 'NONE';
	const customDataKey = 'customData';
	
	let jsonDir = DKR.JsonWorker.parameters['jsonDir'] || 'metaJSON/';
	let mainFileNameDefVar = Number(DKR.JsonWorker.parameters[' mainFileNameDefVar']) || 1;
	let mainFile = DKR.JsonWorker.parameters['mainFile'] || noneFile;
	
		//---INNER FUNCTIONS
	//-open file
	let openJson = function(jsonFileName, callbackTask){
		let url = jsonDir + jsonFileName;
		
		if( false === fileSystem.existsSync(url) ){
			console.log(`DKR.JsonWorker: file ${url} not exist!`);
			return false;
		}
		
		try{
			let xhr = new XMLHttpRequest();
			let jsonData  = -1;
			
			xhr.open('GET', url);
			xhr.overrideMimeType('application/json');
			xhr.onload = function() {
				if (xhr.status < 400) {
					jsonData = JSON.parse(xhr.responseText);
						
					callbackTask(jsonData);
					return jsonData;
				}
			}
			
			xhr.send();
		}catch(error){
			console.log(`DKR.JsonWorker: unknown error on file ${url} opening!!!`);
			console.log(error);
			return false;
		}
		
	}	
	
	//-create file
	let createJson = function(jsonFileName, data){
		let url = jsonDir + jsonFileName;
		let jsonData = JSON.stringify(data);
		try{
			fileSystem.writeFileSync(url, jsonData);
		}catch(error){
			console.log(`DKR.JsonWorker: unknown error on file ${url} writing!!!`);
			console.log(error);
			return false;
		}
				
	}
	
	//-update Main file name
	let updateMainFileFromVariable = function(){
		if(noneFile === mainFile){
			mainFile = $gameVariables.value(mainFileNameDefVar);
			if(0 === mainFile){
				mainFile = noneFile;
			}
		}
	}
	
	
		//---PUBLIC WORK FUNCTIONS
	//--READ!
	//-read...for test	
	DKR.JsonWorker.readJson = function(jsonFileName){
		const readTask = (data) => {
			console.log(data);
		};
		
		let jsonData = openJson(jsonFileName, readTask);
	}
	
	//-map in one variable
	DKR.JsonWorker.simpleMapJSON = function(jsonFileName, variableId){
		const simpeMapTask = (jsonData) => {
			$gameVariables.setValue(variableId, jsonData);
		};
		
		let jsonData = openJson(jsonFileName, simpeMapTask);
	}
	
	//-map in concrete variables one concrete values
	DKR.JsonWorker.concreteMapJSON = function(jsonFileName, jsonKeysArr, variablesIdArr){
		if(jsonKeysArr.length !== variablesIdArr.length){
			console.log('DKR.JsonWorker.concreteMapJSON(): keys and variables quantity must be equal!');
			return false;
		}
			
		const concreteMapTask = (jsonData) => {
			for(let n = 0; n < jsonKeysArr.length; n++){
				$gameVariables.setValue(variablesIdArr[n], jsonData[ jsonKeysArr[n] ]);
			}
		};
		
		let jsonData = openJson(jsonFileName, concreteMapTask);
	}
	
	//-map to many variables all values
	DKR.JsonWorker.fullMapJSON = function(jsonFileName, variablesIdArr){
		const fullMapTask = (jsonData) => {
			let jsonDataValues = Object.values(jsonData);
			
			for(let n = 0; n < variablesIdArr.length; n++){
				$gameVariables.setValue(variablesIdArr[n], jsonDataValues[n]);
			}
		};
		
		let jsonData = openJson(jsonFileName, fullMapTask);
	}
	
	
	//--WRITE!
	//-write simple data
	DKR.JsonWorker.simpleWriteJSON = function(jsonFileName, dataValue, dataKey = customDataKey){
		const customDataObject = {};
		customDataObject[dataKey] = dataValue;
		
		createJson(jsonFileName, customDataObject);
	}
		
	//-write full data	
	DKR.JsonWorker.fullWriteJSON = function(jsonFileName, dataValuesArr, dataKeysArr){
		const customDataObject = {};
		
		if(dataKeysArr.length !== dataValuesArr.length){
			console.log('DKR.JsonWorker.fullWriteJSON(): keys and values quantity must be equal!');
			return false;
		}
		
		for(let n = 0; n < dataKeysArr.length; n++){
			customDataObject[ dataKeysArr[n] ] = dataValuesArr[n];
		}
		
		createJson(jsonFileName, customDataObject);
	}
	
	//--MODIFY!
	//-simple modify
	DKR.JsonWorker.simpleModifyJSON = function(jsonFileName, jsonKey, jsonValue){
		const simpleModifyTask = (data) => {
			data[jsonKey] = jsonValue;
			createJson(jsonFileName, data);
		};
		
		let jsonData = openJson(jsonFileName, simpleModifyTask);
	}
	
	//-full modify
	DKR.JsonWorker.fullModifyJSON = function(jsonFileName, jsonKeysArr, jsonValuesArr){
		
		if(jsonKeysArr.length !== jsonValuesArr.length){
				console.log('DKR.JsonWorker.fullModifyJSON(): keys and values quantity must be equal!');
				return false;
		}
			
		const fullModifyTask = (data) => {
			for(let n = 0; n < jsonKeysArr.length; n++){
				data[ jsonKeysArr[n] ] = jsonValuesArr[n];
			}
			
			createJson(jsonFileName, data);
		};
		
		let jsonData = openJson(jsonFileName, fullModifyTask);
	}
	
	//--MAIN FILE!
	DKR.JsonWorker.readMainFile = function(){
		DKR.JsonWorker.readJson(mainFile);
	}
	
	DKR.JsonWorker.simpleMapMainFile = function(variableId){
		updateMainFileFromVariable();
		
		if(noneFile === mainFile){
			console.log('DKR.JsonWorker: main file not set!');
			return false;
		}
		
		DKR.JsonWorker.simpleMapJSON(mainFile, variableId);
	}
	
	DKR.JsonWorker.concreteMapMainFile = function(jsonKeysArr, variablesIdArr){
		updateMainFileFromVariable();
		
		if(noneFile === mainFile){
			console.log('DKR.JsonWorker: main file not set!');
			return false;
		}
		
		DKR.JsonWorker.concreteMapJSON(mainFile, jsonKeysArr, variablesIdArr)
	}
	
	DKR.JsonWorker.fullMapMainFile = function(variablesIdArr){
		updateMainFileFromVariable();
		
		if(noneFile === mainFile){
			console.log('DKR.JsonWorker: main file not set!');
			return false;
		}
		DKR.JsonWorker.fullMapJSON(mainFile, variablesIdArr);
	}
	DKR.JsonWorker.simpleModifyMainFile = function(jsonKey, jsonValue){
		updateMainFileFromVariable();
		
		if(noneFile === mainFile){
			console.log('DKR.JsonWorker: main file not set!');
			return false;
		}
		
		
		DKR.JsonWorker.simpleModifyJSON(mainFile, jsonKey, jsonValue);
	}
	DKR.JsonWorker.fullModifyMainFile = function(jsonKeysArr, jsonValuesArr){
		updateMainFileFromVariable();
		
		if(noneFile === mainFile){
			console.log('DKR.JsonWorker: main file not set!');
			return false;
		}
		
		
		DKR.JsonWorker.fullModifyJSON(mainFile, jsonKeysArr, jsonValuesArr)
	}
		//---PUBLIC CONTROL FUNCTIONS	
	//-set base dir
	DKR.JsonWorker.setJSONDir = function(dir){
		jsonDir = dir;
	}
	
	//-set main file
	DKR.JsonWorker.setMainFile = function(fileName){
		mainFile = fileName;
		$gameVariables.setValue( mainFileNameDefVar, mainFile);
	}
	
	//-clear main file
	DKR.JsonWorker.clearMainFile = function(){
		mainFile = noneFile;
		$gameVariables.setValue( mainFileNameDefVar, 0);	
	}
	
	//-set main fail default variable id for standard save/load
	DKR.JsonWorker.setMainFileDefaultVariableId = function(variableId){
		if(variableId < 1){
			console.log('DKR.JsonWorker: variable id must be greater than zero!');
		}
		
		 mainFileNameDefVar = variableId;
	}
	
	
	//-ident is file exist
	DKR.JsonWorker.isJSONFileExist = function(jsonFileName){
		let url = jsonDir + jsonFileName;
		
		let isFileExist = fileSystem.existsSync(url);
		
		return isFileExist;
	}
	
})();
 
Социальные закладки